Fix vertical off-by-one error
authorJonas Bernoulli <jonas@bernoul.li>
Thu, 4 Aug 2022 12:05:11 +0000 (14:05 +0200)
committerJonas Bernoulli <jonas@bernoul.li>
Thu, 4 Aug 2022 12:05:11 +0000 (14:05 +0200)
When the usage information is displayed at the top or bottom (as
controlled by `which-key-show-prefix'), then we already accounted
for that by putting (- max-height 1) bindings in each row.  But
we did not ensure that the max-height is used when displaying the
result.  Instead we used (- max-height 1) here too.

When trying to display usage information at the bottom, the result is
that it is not displayed because it is off-window.  When displaying at
the top, then it is displayed, but the last binding is off-window and
never displayed.

This bug did not matter (much) when using the default settings because
then the code used for displaying the window actually ignores the
max-height and just uses the height appropriate to display all lines
in the buffer (i.e., (+ max-height 1)).  However, other display
methods, including but not necessarily limited to third-party methods
(such as `which-key-posframe') may choose to, or absolutely have to,
respect max-height.  In particular, anything that tries to use the
full height of a frame or window, will be affected by this.

which-key.el

index 9d5e403f6d85d5d60aa10ea448546446323b0b74..ba446a56737a437e902ae644845bb7f3af7ba08e 100644 (file)
@@ -1989,6 +1989,9 @@ is the width of the live window."
             (or prefix-title
                 (which-key--maybe-get-prefix-title
                  (key-description prefix-keys))))
+      (when prefix-top-bottom
+       ;; Add back the line earlier reserved for the page information.
+        (setf (which-key--pages-height result) max-lines))
       (when (and (= (which-key--pages-num-pages result) 1)
                  (> which-key-min-display-lines
                     (which-key--pages-height result)))